home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE18 / SURVIVE / DMLOGIN.PAS < prev    next >
Pascal/Delphi Source File  |  1996-12-03  |  4KB  |  132 lines

  1. unit DMLogin;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   DB, DBTables, Login;
  8.  
  9. const
  10.   evtLoginSuccessful  = 100;
  11.   evtLoginFail        = 101;
  12.   evtLogout           = 102;
  13.   evtChangePassword   = 103;
  14.  
  15. type
  16.   TLoginDM = class(TDataModule)
  17.     qryGetUserValues: TQuery;
  18.     qryPostAuditTrail: TQuery;
  19.     qrySetLastLoggedInDate: TQuery;
  20.     dbInternal: TDatabase;
  21.   protected
  22.     FLogin: TLoginManager;
  23.   public
  24.     constructor Create(AOwner: TComponent); override;
  25.     procedure GetUserValues(var UserID: LongInt;
  26.                             var FirstName: String;
  27.                             var LastName: String;
  28.                             var DateLastLogin: TDateTime;
  29.                             var PasswordExpired: Boolean);
  30.     procedure PostAuditTrail(EventID: Integer; EventMsg: String);
  31.     procedure PostUserLoginDate;
  32.   end;
  33.  
  34. var
  35.   LoginDM: TLoginDM;
  36.  
  37. implementation
  38.  
  39. {$R *.DFM}
  40.  
  41. { The system account info will typically be implemented
  42.   in a more secure fashion, like in a DLL. }
  43. const
  44.   SystemAccountUserName = 'SYSTEM';
  45.   SystemAccountPassword = 'onomatopoeia';
  46.  
  47. constructor TLoginDM.Create(AOwner: TComponent);
  48. begin
  49.   inherited Create(AOwner);
  50.  
  51.   if not (AOwner is TLoginManager) then
  52.     raise Exception.Create('TLoginDM cannot be created independently of TLoginManager.');
  53.  
  54.   FLogin := AOwner as TLoginManager;
  55.  
  56.   with dbInternal do
  57.   begin
  58.     Params.Values['USER NAME'] := SystemAccountUserName;
  59.     Params.Values['PASSWORD'] := SystemAccountPassword;
  60.   end;
  61. end;
  62.  
  63. procedure TLoginDM.GetUserValues(var UserID: LongInt;
  64.                                  var FirstName: String;
  65.                                  var LastName: String;
  66.                                  var DateLastLogin: TDateTime;
  67.                                  var PasswordExpired: Boolean);
  68. { Returns key information about the current user }
  69. var
  70.   DateLastChange: TDateTime;
  71. begin
  72.   with qryGetUserValues do
  73.   begin
  74.     Close;
  75.     ParamByName('Username').AsString := FLogin.Username;
  76.     Open;
  77.     try
  78.       if Eof then
  79.         raise Exception.Create('Invalid login.');
  80.  
  81.       UserID          := FieldByName('UserID').AsInteger;
  82.       FirstName       := FieldByName('FirstName').AsString;
  83.       LastName        := FieldByName('LastName').AsString;
  84.       DateLastLogin   := FieldByName('DateLastLogin').AsDateTime;
  85.  
  86.       { if DateLastPasswordChange is null, then password change forced }
  87.       if FieldByName('DateLastPasswordChange').IsNull then
  88.         PasswordExpired := True
  89.       else
  90.  
  91.         { if PasswordLifespan is null, then password never expires }
  92.         if FieldByName('PasswordLifespan').IsNull then
  93.           PasswordExpired := False
  94.         else
  95.           PasswordExpired :=
  96.             Date - FieldByName('DateLastPasswordChange').AsDateTime >=
  97.             FieldByName('PasswordLifespan').AsInteger;
  98.     finally
  99.       Close;
  100.     end;
  101.   end;
  102. end;
  103.  
  104. procedure TLoginDM.PostAuditTrail(EventID: Integer; EventMsg: String);
  105. { Writes an entry in the audit trail }
  106. begin
  107.   with qryPostAuditTrail do
  108.   begin
  109.     ParamByName('ApplicationID').AsInteger := FLogin.ApplicationID;
  110.     if FLogin.UserID = cNoUserID then  { This would happen when posting a bad login event }
  111.       ParamByName('UserID').Clear     { We want a null userID in this case }
  112.     else
  113.       ParamByName('UserID').AsInteger := FLogin.UserID;
  114.  
  115.     ParamByName('EventID').AsInteger := EventID;
  116.     ParamByName('Description').AsString := EventMsg;
  117.     ExecSQL;
  118.   end;
  119. end;
  120.  
  121. procedure TLoginDM.PostUserLoginDate;
  122. { Writes the current date as the user's "date last logged in" }
  123. begin
  124.   with qrySetLastLoggedInDate do
  125.   begin
  126.     ParamByName('UserID').AsInteger := FLogin.UserID;
  127.     ExecSQL;
  128.   end;
  129. end;
  130.  
  131. end.
  132.